home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK2.toast / Development Kits (Disc 2) / ScriptX / Draggable ScriptX Folders / utils / DTK / Examples / Custom Classes / slider.cls < prev    next >
Encoding:
Text File  |  1995-11-30  |  4.6 KB  |  176 lines  |  [TEXT/ttxt]

  1. --<<<
  2. format debug "-- Compiling Slider Class . . .\n" undefined undefined
  3.  
  4. class Slider(GroupPresenter)
  5. inst vars
  6.     id
  7.     thumb
  8.     track
  9.     minY
  10.     maxY
  11.     minValue
  12.     maxValue
  13.     currentValue
  14.     connectedObject
  15.     notifyMethod
  16.     --Event Interests
  17.     mouseDown
  18.     mouseUp
  19.     mouseMove
  20.     mouseLeaving
  21. end
  22.  
  23. method init self {class slider} #rest args #key castNum: lingo: dirInfo:->
  24. (
  25.     apply nextMethod self args
  26.     local castList := dirInfo[@cast]
  27.     self.id := findSXKey(lingo, "id")
  28.     print castlist[castNum] --debug
  29.     local track := (new TwoDShape boundary:castlist[castNum].boundary)
  30.     if track = empty do (
  31.         format debug "Slider castNum: %*\n" castNum @unadorned
  32.         report GeneralError "problem with castNum parameter"
  33.     )
  34.     prepend self track
  35.     self.track := track
  36.     local thumbCast := castFromName(findSXKey(lingo, "thumb"))
  37.     format debug "thumbCast = %*\n"  thumbCast @unadorned --debug
  38.     local thumbBmp := thumbCast.boundary
  39.     format debug "thumbBmp = %*\n"  thumbBmp @unadorned --debug
  40.     thumbBmp.matteColor := whiteColor
  41.     local thumb := (new TwoDShape boundary:thumbBmp)
  42.     if thumb <> empty do (
  43.         prepend self thumb
  44.         self.thumb := thumb
  45.         local tHt := thumb.height
  46.         local myRect := self.bbox
  47.         self.minY := myRect.y1 + tHt
  48.         self.maxY := myRect.y2 - tHt
  49.     )
  50.     self.minValue := -50
  51.     self.maxValue := 50
  52.     self.currentValue := 0
  53.     self.connectedObject := self.notifyMethod := undefined
  54.     return self
  55. )
  56.  
  57. method mouseDownAction self {class Slider} theInterest theEvent ->
  58. (
  59.     local addInterset := (e -> if not e.advertised do addEventInterest e)
  60.     addInterset self.mouseMove
  61. --    addInterset self.mouseUp
  62. --    addInterset self.mouseLeaving
  63. )
  64.  
  65. method mouseUpAction self {class Slider} theInterest theEvent ->
  66. (
  67.     local disconn :=  ( myInterest -> if myInterest.advertised do removeEventInterest myInterest)
  68.     disconn self.mouseMove
  69. --    disconn self.mouseUp
  70. --    disconn self.mouseLeaving
  71. )
  72.  
  73. method mouseMoveAction self {class Slider} theInterest theEvent ->
  74. (
  75.     local newY := theEvent.localCoords.y
  76.     local minY := self.minY
  77.     local maxY := self.maxY
  78.     if newY < minY do newY :=  minY
  79.     if newY > self.maxY do newY := maxY
  80.     if  newY <> self.currentValue do (
  81.         self.thumb.y := newY
  82.         notifyChanged self true
  83.         local minY := self.minY
  84.         local maxY := self.maxY
  85.         local minValue := self.minValue
  86.         local maxValue := self.maxValue
  87.         local Ypct := (maxY  - newY) / (maxY - minY)
  88.         local newVal := minValue + ((maxValue - minValue)*Ypct)
  89.         self.currentValue := newVal
  90.         local connObj := self.connectedObject
  91.         if connObj <> undefined do (
  92.             self.notifyMethod connObj newVal
  93.         )
  94.     )
  95. )
  96.  
  97. method setCurrValue self  {class Slider} value ->
  98. (
  99.     self.currentValue := value
  100.     local minY := self.minY
  101.     local maxY := self.maxY
  102.     local minValue := self.minValue
  103.     local maxValue := self.maxValue
  104.     local valpct := value / (maxValue - minValue)
  105.     local newY := (minY + ((maxY - minY)*valpct)) as integer
  106.     self.thumb.y := newY
  107.     notifyChanged self true
  108. )
  109.  
  110. method connect self  {class Slider} #rest args #key values:(#(-100,100)) target: changeMethod:->
  111. (
  112.     self.connectedObject := target
  113.     self.notifyMethod := changeMethod
  114.     self.minValue := values[1]
  115.     self.maxValue := values[2]
  116. )
  117.  
  118. method hook self  {class Slider}->
  119. (
  120.     local mdEvnt := self.mouseDown
  121.     if not (isAKindOf mdEvnt MouseDownEvent) do (
  122.         mdEvnt := new MouseDownEvent
  123.         mdEvnt.eventReceiver := mouseDownAction
  124.         mdEvnt.authorData := self
  125.         mdEvnt.device := new MouseDevice
  126.         mdEvnt.presenter := self.thumb
  127.         self.mouseDown := mdEvnt
  128.     )
  129.     addEventInterest mdEvnt
  130.     
  131.     local muEvent := self.mouseUp
  132.     if not (isAKindOf muEvent MouseUpEvent) do (
  133.         muEvent := new MouseUpEvent
  134.         muEvent.eventReceiver := mouseUpAction
  135.         muEvent.authorData := self
  136.         muEvent.device := mdEvnt.device
  137.         muEvent.presenter := self.presentedBy
  138.         muEvent.matchedInterest := mdEvnt
  139.         self.mouseUp := muEvent
  140.     )
  141.     addEventInterest muEvent
  142.  
  143.     local mmEvent := self.mouseMove
  144.     if not (isAKindOf mmEvent MouseMoveEvent) do (
  145.         mmEvent := new MouseMoveEvent
  146.         mmEvent.eventReceiver := mouseMoveAction
  147.         mmEvent.authorData := self
  148.         mmEvent.device := mdEvnt.device
  149.         mmEvent.presenter := self
  150.         mmEvent.matchedInterest := mdEvnt
  151.         self.mouseMove := mmEvent
  152.     )
  153.     local mlEvent := self.mouseLeaving
  154.     
  155.     if not (isAKindOf mmEvent MouseCrossingEvent) do (
  156.         mlEvent := new MouseCrossingEvent
  157.         mlEvent.eventReceiver := mouseUpAction
  158.         mlEvent.authorData := self
  159.         mlEvent.device := mdEvnt.device
  160.         mlEvent.presenter := self
  161.         self.mouseLeaving := mlEvent
  162.     )
  163.     addEventInterest mlEvent
  164. )
  165.  
  166. method unhook self {class Slider}->
  167. (
  168.     local disconn :=  ( myInterest -> if myInterest.advertised do removeEventInterest myInterest)
  169.     disconn self.mouseUp
  170.     disconn self.mouseDown
  171.     disconn self.mouseMove
  172. )
  173.  
  174. #(Slider, #("id"),#("hook","unhook","connect"))
  175. -->>>
  176.